// 封装数据库的基本操作
const sql = {
    // 插入操纵
    insert (ColName, insertData) {
      console.log('11111111')
      return new Promise((resolve, reject) => {
        ColName.insertMany(insertData, (err) => {
          err ? reject(err) : resolve()
        })
      })
    },
    // 查询操作
    find (ColName, whereData, showData) {
      return new Promise((resolve, reject) => {
        ColName.find(whereData, showData).exec((err, data) => {
          err ? reject(err) : resolve(data)
        })
      })
    },
    // 查询分页操作
    paging (ColName, whereData, showData, limit, count) {
      return new Promise((resolve, reject) => {
        ColName.find(whereData, showData).limit(limit).skip(count * limit).exec((err, data) => {
          err ? reject(err) : resolve(data)
        })
      })
    },
    // 查询排序操作
    sort (ColName, whereData, showData, sortData) {
      return new Promise((resolve, reject) => {
        ColName.find(whereData, showData).sort(sortData).exec((err, data) => {
          err ? reject(err) : resolve(data)
        })
      })
    },
    // 更新数据库
    update (ColName, whereObj, updateObj, updateFlag) {
      // 如果updateFlag 为1 表示更新多条，其余为更新单条
      const updateType = updateFlag === 1 ? 'updateMany' : 'updateOne'
      // ColName[updateType] ===> updateFlag 1 ==> ColName.updateMany
      // ColName[updateType] ===> updateFlag 0 ==> ColName.updateOne
      return new Promise((resolve, reject) => {
        ColName[updateType](whereObj, updateObj, (err) => {
          err ? reject() : resolve()
        })
      })
    },
    // 删除数据
    delete (ColName, whereObj, deleteFlag) {
      // 如果deleteFlag 为1 表示删除多条，其余为删除单条
      const deleteType = deleteFlag === 1 ? 'deleteMany' : 'deleteOne'
      return new Promise((resolve, reject) => {
        ColName[deleteType](whereObj, (err) => {
          err ? reject(err) : resolve()
        })
      })
  
    },
    distinct (ColName, feild) {
      return new Promise((resovle, reject) => {
        ColName.distinct(feild).exec((err, data) => {
          err ? reject(err) : resovle(data)
        })
      })
    }
  }
  module.exports = sql